// import TYPES from '@/constant' // 常量
import store from '@/utils/store' // 全局状态管理

// 请求数据,第二参数除了可以自定义传入请求数据外
export function fetch (url, options = {}) {
  return new Promise(function (resolve, reject) {
    wx.showNavigationBarLoading() // 导航显示加载动画
    // 这是遮罩层loading
    showLoading()

    // 微信自带的请求组件API
    wx.request({
      url, // 请求链接
      method: options.method || 'GET', // 请求方式post get
      // 请求头信息
      header: options.header || {
        'Content-Type': 'application/json'
      },
      success: function (res) {
        if (res.statusCode === 200) {
          console.log('请求链接', url)
          resolve(res.data)
        } else {
          // reject()
          // 其它状态码情况下，返回空数据
          resolve({
            data: []
          })
          console.log('请求错误，状态码：' + res.statusCode)
        }
        wx.hideNavigationBarLoading() // 取消导航加载动画
        // setTimeout(function () {
        //   wx.hideLoading()
        // }, 300)
      },
      fail: function (error) {
        // 加载失败后
        reject(error)
        hideLoading() // 隐藏加载层
      }
    })
  })
}

// 页面跳转事件封装，直接传入跳转的页面路径，可加动态参数('/index/main?id=233')
export function bindViewTap (viewurl, navFlag) {
  // 默认跳转首页，mpvue自动添加了前缀pages
  let url = viewurl || '../index/main'
  // 判断是否微信平台，并且自己定义参数--是否使用navto来跳转
  if (mpvuePlatform === 'wx' && !navFlag) {
    mpvue.switchTab({ url })
    // console.log('进来wxtab跳转')
  } else {
    mpvue.navigateTo({ url })
  }
}

// 显示加载中图标
export function showLoading (title) {
  // 保存加载状态到 全局作用store
  store.commit('showLoading')
  // 微信原生加载中
  wx.showLoading({
    title: title || '加载中...',
    mask: true
  })
}
// 隐藏加载图标
export function hideLoading (time) {
  setTimeout(function () {
    store.commit('hideLoading')
    wx.hideLoading()
  }, time || 1000)
}

// 授权登陆检测
export function getUserSetting () {
  // 直接使用微信原生的
  wx.getSetting({
    success: function (res) {
      if (res.authSetting['scope.userInfo']) {
        // 用户授权过..login登陆存过
        // userInfoSave() // 存用户信息到缓存中
      } else {
        // 用户还未授权过，跳转到一键登陆页面
        bindViewTap('../login/main', true)
      }
    }
  })
}
// 记录存放用户数据到缓存中
export function userInfoSave () {
  wx.getUserInfo({
    success: function (res) {
      // 异步设置缓存-存用户信息
      setStorageSync('userInfo', res.userInfo)
      // 用户的国家 res.userInfo.country
      // 用户的城市 res.userInfo.city
      // 用户的省份 res.userInfo.province
      // 用户的头像图片 res.userInfo.avatarUrl
      // 用户的网名res.userInfo.nickName
      // 用户性别 0：未知、1：男、2：女 res.userInfo.gender
      wx.setStorageSync('userInfoFlag', true) // 记录登陆状态
    }
  })
}

// TODO: 验证登陆状态-登陆后可返回指定页面
export function flagUserToPage () {
  // 读取缓存变量-没登陆的时候
  if (!getStorageSync('userInfoFlag')) {
    bindViewTap('../login/main', true) // 跳转到指定页面
    return false
  }
  return true
}

// 显示提示弹窗
export function showToast (ops) {
  // 原生提示功能
  wx.showToast({
    title: ops.title || '添加成功',
    icon: ops.icon || 'success',
    duration: ops.time || 2000
  })
}

// 返回上一层页面（可指定上几层页面）
export function viewBack (backNum) {
  // 原生，倒退页面
  wx.navigateBack({
    delta: backNum || 1
  })
}

// 倒退页面，传入退后页面数量, 是否要刷新回退页面(true刷新，flash不刷新)
export function backPage (backPageNum, refreshPage = true) {
  let pages = getCurrentPages() // 获取当前页面
  let beforePage = pages[pages.length - (1 + backPageNum)] // 前一个页面
  wx.navigateBack({
    success: function () {
      if (refreshPage === true) {
        beforePage.onLoad() // 执行前一个页面的onLoad方法，刷新回退的页面
      }
    }
  })
}

// 根据判断在跳转页面
export function noUrlToNewPage (flag, toNewUrl) {
  if (flag) {
    bindViewTap(toNewUrl || '../index/main')
  }
}

// 同步缓存设置
export function setStorage (key, value) {
  wx.setStorage({
    key: key,
    data: value
  })
}
// 同步读取缓存数据
export function getStorageSync (key) {
  return wx.getStorageSync(key)
}
// 异步设置缓存
export function setStorageSync (key, value) {
  return wx.setStorageSync(key, value)
}
// 异步读取缓存
export function getStorage (key, callbackFn) {
  wx.getStorage({
    key: key,
    success (res) {
      callbackFn(res.data)
    }
  })
}

// 关闭骨架屏,外部传入this作用域页面
export function closeSkeleton (that, time) {
  setTimeout(() => {
    that.skeletonFlag = false
  }, time || 100)
}
